home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / 4cmp22s.zip / UNLOAD.4TH < prev    next >
Text File  |  1994-10-30  |  3KB  |  112 lines

  1. \ UNLOAD PROGRAM, BY TOM ALMY.
  2.  \ THIS PROGRAM IS COPYRIGHT (C) 1985 BY TOM ALMY,
  3.  \ ALL RIGHTS RESERVED.
  4.  
  5. \ Registered users of ForthCMP may use this program to create 
  6. \ INTEL hex format files for EPROM programmers.
  7.  
  8.  
  9.  \ INTEL is a trademark of INTEL CORPORATION
  10.  \ CP/M is a trademark of DIGITAL RESEARCH
  11.  \ MS is a trademark OF MICROSOFT
  12.  
  13.  
  14. \ SETUP
  15. 256 MSDOS
  16. SCONSTANT SDEFSTR COM"
  17. SCONSTANT DDEFSTR HEX"
  18. HEX
  19. 6000 CONSTANT BUFSIZ   ( LARGE I/O Buffers! )
  20. DECIMAL
  21. 32 CONSTANT MAXRECSIZE ( maximum size of HEX record )
  22.  
  23. INCLUDE DOS1
  24. INCLUDE FILTER
  25. VARIABLE ADDR  ( address in file of current byte )
  26. VARIABLE CHECKSUM  ( Calculated checksum for record )
  27. DSEG CREATE CHARBUF MAXRECSIZE ALLOT ( Character buffer )
  28.  
  29. 0 0 IN/OUT 
  30. : NOTICE 
  31.    ." UNLOAD (.COM TO .HEX) PROGRAM " CR
  32.    ." COPYRIGHT (C) 1985 BY THOMAS ALMY " CR ;           
  33.  
  34. 0 0 IN/OUT
  35. : USAGE   ( print usage information )
  36.   CR 
  37.   ." USAGE:  UNLOAD [-startloc] [infile] [outfile] " CR
  38.   ." infile IS THE COM FILE TO CONVERT (EXTENSION .COM DEFAULT)"  CR
  39.   ." outfile IS THE INTEL HEX OUTPUT FILE (EXTENSION .HEX DEFAULT)" CR
  40.   ." If files not specified, then standard input and output used." CR
  41.   ." To specify outfile without infile, use '-' for infile" CR
  42.   ." startloc IS UNSIGNED HEX STARTING LOCATION."  CR
  43.   ."         IF OMITTED, 100 IS ASSUMED (MS-DOS DEFAULT)"   CR
  44.   ABORT ;
  45.   
  46. 0 0 IN/OUT
  47. : SETUP    HEX
  48.   SETFILES IF USAGE THEN
  49.   OPTIONSTRING 2@ ?DUP IF 
  50.         OVER C@ [CHAR] ? = IF USAGE THEN     \ Added =
  51.     2DUP + 0 C<-
  52.     0. 2SWAP  >NUMBER 2DROP D>S ADDR ! \ Added 1-
  53.   ELSE
  54.     DROP 256 ADDR ! ( msdos default )  
  55.   THEN
  56.   ;
  57.  
  58.  
  59. HEX
  60. 1 0 IN/OUT
  61. : NIBOUT   0F AND DUP 9 > IF [CHAR] A [CHAR] 9 - 1- + THEN
  62.    [CHAR] 0 + EMIT ;
  63.  
  64. 1 0 IN/OUT
  65. : BYTEOUT  DUP CHECKSUM +! DUP 4 RSHIFT NIBOUT NIBOUT ;
  66.  
  67. 1 0 IN/OUT
  68. : INTOUT  DUP 8 RSHIFT BYTEOUT BYTEOUT ;
  69.  
  70. 0 0 IN/OUT
  71. : MARKER [CHAR] : EMIT  CHECKSUM OFF ;
  72.  
  73. 0 0 IN/OUT
  74. : CKSOUT  CHECKSUM @ NEGATE BYTEOUT ;
  75.  
  76. DECIMAL
  77.  
  78. 1 0 IN/OUT
  79. : DATAREC ( LENGTH -- )
  80.   ?DUP IF ( no record if no length )
  81.    MARKER DUP BYTEOUT ADDR @ INTOUT 0 BYTEOUT
  82.    DUP ADDR +!
  83.    0 DO CHARBUF I + C@ BYTEOUT LOOP
  84.    CKSOUT CR THEN ;
  85.  
  86. 0 0 IN/OUT
  87. : EOFREC   MARKER 0 BYTEOUT 0 INTOUT 1 BYTEOUT CKSOUT CR ;
  88.  
  89. 0 1 IN/OUT
  90. : FETCHDATA ( -- LENGTH )
  91.    MAXRECSIZE DUP 
  92.    0 DO  KEY  DUP 0< IF ( end of file ) 2DROP I LEAVE THEN CHARBUF I + C! LOOP 
  93.    ;
  94.  
  95. 0 0 IN/OUT
  96. : MAKEHEX
  97.   BEGIN  FETCHDATA  DUP  DATAREC
  98.     MAXRECSIZE <> UNTIL
  99.   EOFREC ;
  100.  
  101. : MAIN
  102.     SETBUFS    \ set up I/O buffers before any KEY or EMIT
  103.     NOTICE    \ print welcome message
  104.     SETUP    \ open files and check argument string
  105.     MAKEHEX    \ do the work
  106.     BYE        \ close files and exit
  107. ;
  108.  
  109. INCLUDE DOS2
  110. INCLUDE FORTHLIB
  111. END
  112.